using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace TestCecile
{
    public partial class PrintenFilterForm : Form
    {

        private string FilterTekst = "";
        private string SortTekst = "KLANTNAAM";
        private string FilterToonTekst = "ALLE KLANTEN ";
        private bool isContact = true;
        private bool isAdres = true;
        private bool isAankoop = true;
        private DataView printDataView;
        int pagina = 1;
        int aLijnenGeprint = 0;
        private List<string> printLijnen = new List<string>();

        public PrintenFilterForm()
        {
            InitializeComponent();
        }

       
        private void PrintenFilterForm_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dataSet1.KLANT' table. You can move, or remove it, as needed.
            this.kLANTTableAdapter .FillZonderDeleted(this.dataSet1.KLANT);
            for (int i = 0; i < clbKolommen.Items.Count - 1; i++)
            {
                clbKolommen.SetItemChecked(i, true);
            }
            kLANTDataGridView.Columns["dgvOpmerking"].Visible = false;
            lblSorteer.Text = "Klanten gesorteerd op " + SortTekst;
            lblFilter.Text = FilterToonTekst;

            printDataView = kLANTBindingSource.List as DataView;
        }

        private void btnFilterAan_Click(object sender, EventArgs e)
        {
            FilterToonTekst = "";
            maakFilterTekst();
        }

        private void maakFilterTekst()
        {
            int aFilters = 0;
            FilterTekst = " ";
            string hulp=" ";
            if (chkPostnr.Checked && (txtPostCodeVan.Text.Length > 0 || txtPostCodeTot.Text.Length > 0))
            {
                if (txtPostCodeVan.Text.Length > 0 && txtPostCodeTot.Text.Length > 0)
                {
                    if (txtPostCodeVan.Text.Equals(txtPostCodeTot.Text))
                    {
                        hulp = "POSTNR = " + "'" + txtPostCodeVan.Text.Trim() + "'";
                        FilterToonTekst = "POSTNR = " + txtPostCodeVan.Text.Trim();
                    }
                    else
                    {
                        hulp = "POSTNR >= " + "'" + txtPostCodeVan.Text.Trim() + "'" + " AND " + "POSTNR <= " + "'" + txtPostCodeTot.Text.Trim() + "'";
                        FilterToonTekst = "POSTNR van " + txtPostCodeVan.Text.Trim() + " tot en met " + txtPostCodeTot.Text.Trim();
                    }
                }
                else
                {
                    if (txtPostCodeVan.Text.Length > 0)
                    {
                        hulp = "POSTNR >= "+"'"+txtPostCodeVan.Text.Trim()+"'";
                        FilterToonTekst = "POSTNR van " + txtPostCodeVan.Text.Trim();
                    }
                    else
                    {
                        hulp = "POSTNR <= "+"'"+txtPostCodeTot.Text.Trim()+"'";
                        FilterToonTekst = "POSTNR tot en met " + txtPostCodeTot.Text.Trim();
                    }
                }
                FilterToonTekst += "/  ";
                aFilters++;
                if (aFilters == 1)
                    FilterTekst = hulp;
                else
                    FilterTekst += " AND "+hulp;
            }

            if (chkKlant .Checked && (txtNaamVan.Text.Length > 0 || txtNaamTot.Text.Length > 0))
            {
                string vZoekVan = txtNaamVan.Text;
                string vZoekTot = txtNaamTot.Text;
                FilterToonTekst += "KLANTEN VAN "+vZoekVan+" TOT EN MET "+vZoekTot+"/  ";
                if (vZoekVan.Length > 0)
                {
                    if (vZoekVan.Substring(0, 1).Equals("'"))
                        vZoekVan = "'" + vZoekVan;
                }
                if (vZoekTot.Length > 0)
                {
                    if (vZoekTot.Substring(0, 1).Equals("'"))
                        vZoekTot = "'" + vZoekTot;
                }
                if (vZoekVan.Length > 0 && vZoekTot.Length > 0)
                {
                    if (vZoekVan.Equals(vZoekTot))
                        hulp = "KLNM like '" + vZoekVan + "%'";
                    else
                        hulp = "KLNM >= " + "'" + vZoekVan.Trim() + "'" + " AND " + "KLNM <= " + "'" + vZoekTot.Trim() + "'";
                }
                else
                {
                    if (vZoekVan.Length > 0)
                    {
                        hulp = "KLNM >= " + "'" + vZoekVan.Trim() + "'";
                    }
                    else
                    {
                        hulp = "KLNM <= " + "'" + vZoekTot.Trim() + "'";
                    }
                }
                aFilters++;
                if (aFilters == 1)
                    FilterTekst = hulp;
                else
                    FilterTekst += " AND " + hulp;
            }
            if (chkAankoopdatum.Checked)
            {
                string vDatum = dtpAankoopDatum.Value.ToShortDateString();
                FilterToonTekst += "LAATSTE AANKOOP VANAF " + vDatum + "/  ";
                hulp = "DATLAATST >= " + "'" + vDatum + "'";
                aFilters++;
                if (aFilters == 1)
                    FilterTekst = hulp;
                else
                    FilterTekst += " AND " + hulp;

            }
            if (chkFiche.Checked && txtFiche.Text.Length > 0)
            {
                double vFiche = 0;
                try
                {
                    vFiche = double.Parse(txtFiche.Text.ToString());
                }
                catch (Exception) { }
                FilterToonTekst += "AANTAL FICHES VANAF " + vFiche;
                hulp = "AKORTING >= " + vFiche;
                aFilters++;
                if (aFilters == 1)
                    FilterTekst = hulp;
                else
                    FilterTekst += " AND " + hulp;

            }
            //MessageBox.Show(FilterTekst);
            lblFilter.Text = FilterToonTekst;
            kLANTBindingSource.Filter = FilterTekst;
        }

        private void kLANTDataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            SortTekst = kLANTDataGridView.Columns[e.ColumnIndex].HeaderText;
            if (SortTekst.Equals("K")) SortTekst = "AANTAL FICHES";
            lblSorteer.Text = "Klanten gesorteerd op " + SortTekst.ToUpper();
        }

        
        private void clbKolommen_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            try
            {
                string tekst = clbKolommen.SelectedItem.ToString();
                Text = tekst;
                if (e.NewValue == CheckState.Checked)
                    updateKolommen(tekst, true);
                else
                    updateKolommen(tekst, false);
            }
            catch (Exception ) { ;}
        }

        
        private void updateKolommen(string kolom, bool aan)
        {
            switch (kolom)
            {
                case "Adresinfo":
                    isAdres = aan;
                    kLANTDataGridView.Columns["dgvStraat"].Visible = aan;
                    kLANTDataGridView.Columns["dgvHuisnr"].Visible = aan;
                    kLANTDataGridView.Columns["dgvPostnr"].Visible = aan;
                    kLANTDataGridView.Columns["dgvStad"].Visible = aan;
                    break;
                case "Aankoopinfo":
                    isAankoop = aan;
                    kLANTDataGridView.Columns["dgvDatlaatst"].Visible = aan;
                    kLANTDataGridView.Columns["dgvAkorting"].Visible = aan;
                    break;
                case "Contactinfo":
                    isContact = aan;
                    kLANTDataGridView.Columns["dgvTel"].Visible = aan;
                    kLANTDataGridView.Columns["dgvEmail"].Visible = aan;
                    break;
                
                case "Opmerking":
                    kLANTDataGridView.Columns["dgvOpmerking"].Visible = aan; 
                    break;
            }
        }

        private void btnFilterUit_Click(object sender, EventArgs e)
        {
            kLANTBindingSource.RemoveFilter();
            chkAankoopdatum.Checked = false;
            chkFiche.Checked = false;
            chkPostnr.Checked = false;
            chkKlant.Checked = false;
            dtpAankoopDatum.Value = DateTime.Today;
            txtFiche.Text = "";
            txtNaamTot.Text = "";
            txtNaamVan.Text = "";
            txtPostCodeTot.Text = "";
            txtPostCodeVan.Text = "";
            kLANTBindingSource.Sort = "KLNM";
            SortTekst = "KLANTNAAM";
            lblSorteer.Text = "Klanten gesorteerd op " + SortTekst;
            FilterToonTekst = "ALLE KLANTEN ";
            lblFilter.Text = FilterToonTekst;
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            printDataView = kLANTBindingSource.List as DataView;
            printLijnen.Clear();
            string lijn = "";
            foreach (DataRowView drv in printDataView)
            {
                try
                {
                    lijn = "";
                    lijn = drv["KLNM"].ToString().Trim() + " " + drv["KLVNM"].ToString().Trim();
                    printLijnen.Add(lijn);
                    if (isAdres){
                        lijn = drv["STRAAT"].ToString().Trim() + "," + drv["HUISNR"].ToString().Trim() +"  "+
                            drv["POSTNR"].ToString().Trim() + " - " + drv["STAD"].ToString().Trim();
                        printLijnen.Add(lijn);
                    }    
                    if (isContact){
                        lijn = "Tel:"+drv["TEL1"].ToString().Trim() + "  Email:" + drv["EMAIL"].ToString().Trim();
                         printLijnen.Add(lijn);
                    }
                    if (isAankoop)
                    {
                        string vdatum = "";
                        try
                        {
                            vdatum = DateTime.Parse(drv["DATLAATST"].ToString()).ToShortDateString();
                        }
                        catch (Exception ){};
                        lijn = "Laatste aankoop: "+vdatum.Trim() + "  Aantal Fiches: " + drv["AKORTING"].ToString().Trim();
                        printLijnen.Add(lijn);
                    }
                    printLijnen.Add("EINDE");
                    
                    


                }
                catch (Exception ex) { ;}
            }

            printPreviewDialog.Height = 800;
            printPreviewDialog.Width = 1200;
            printPreviewDialog.PrintPreviewControl.Zoom = 1.00;
            printPreviewDialog.ShowDialog();
        }

        private void printDocument_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
        {
            pagina = 1;
            aLijnenGeprint = 0;
        }

        private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            string titel = lblFilter.Text ;
            string titelBis = lblSorteer.Text;
            string hoofding = "hoffding";
            Graphics g = e.Graphics;
            Brush opvulling = Brushes.LightGray;
            Font titelFont = new Font("Arial", 10);
            //if (printBetalingInfo) titelFont = new Font("Courier New", 12, FontStyle.Bold);
            Font kleineFont = new Font("Courier New", 7);
            Font groteFont = new Font("Courier New", 9);
            Font font = groteFont;
            Pen gewonePen = new Pen(Color.Black, 1);
            //if (lengtePrintLijn < 150) font = groteFont;
            //else font = kleineFont;



            Size hoofdingSize = Size.Ceiling(g.MeasureString(hoofding, font));
            Size lijnSize = Size.Ceiling(g.MeasureString(printLijnen[0], font));
            int maxLengte = 0;
            int maxIndex = 0;
            for (int i = 0; i < printLijnen.Count; i++)
            {
                lijnSize = Size.Ceiling(g.MeasureString(printLijnen[i], font));
                if (lijnSize.Width > maxLengte) { maxLengte = lijnSize.Width; maxIndex = i; }
            }
            lijnSize = Size.Ceiling(g.MeasureString(printLijnen[maxIndex], font));
            Size size = lijnSize;
            if (hoofdingSize.Width > lijnSize.Width) size = hoofdingSize;


            int x = 10; int y = 5;
            // titel

            y += 15;
            Size titelSize = Size.Ceiling(g.MeasureString(titel, titelFont));
            e.Graphics.DrawRectangle(gewonePen, x - 2, y - 2, titelSize.Width + 2, titelSize.Height + 2);
            e.Graphics.DrawString(titel, titelFont, Brushes.Black, x, y);
            y += titelSize.Height + 2;
            e.Graphics.DrawString(titelBis, titelFont, Brushes.Black, x, y);
            y += titelSize.Height + 2;
            e.Graphics.DrawString("Datum lijst: "+DateTime.Today.ToShortDateString()  +"  Blz - " + pagina, titelFont, Brushes.Black, x, y);
            y += 6;


            //hoofding
            /*y += 15;

            e.Graphics.DrawRectangle(gewonePen, x - 2, y - 2, size.Width + 2, hoofdingSize.Height + 2);
            e.Graphics.DrawString(hoofding, font, Brushes.Black, x, y);
            y += 10;*/
            //details

            while (aLijnenGeprint < printLijnen.Count)
            {
                y += hoofdingSize.Height + 2;
                if (y >= e.PageBounds.Height - 20) { pagina++; e.HasMorePages = true; return; }
               
                // y += 2;
                if (printLijnen[aLijnenGeprint].Equals("EINDE"))
                {
                    y -= hoofdingSize.Height + 2;
                    e.Graphics.DrawLine(gewonePen, x, y + lijnSize.Height + 2, x + size.Width, y + lijnSize.Height + 2);
                }
                else
                    e.Graphics.DrawString(printLijnen[aLijnenGeprint], font, Brushes.Black, x, y);
                // y += 2;
                aLijnenGeprint++;
            }
        }

        private void bnrPrintGeselecteerd_Click(object sender, EventArgs e)
        {
            lblSorteer.Text = "";
            lblFilter.Text = "GESELECTEERDE KLANTEN";
                List<int> lijst = new List<int>();
                DataGridViewSelectedRowCollection sel = this.kLANTDataGridView.SelectedRows;
                            

                printDataView =  kLANTBindingSource.List as DataView;
                printLijnen.Clear();
                string lijn = "";
             
               // foreach (DataGridViewRow rij in sel)
                //{
                for (int i = sel.Count-1; i>= 0;i--)  
                {
                    DataGridViewRow rij = sel[i];
                    try
                    {
                        DataRowView drv = rij.DataBoundItem as DataRowView;
                        lijn = "";
                        lijn = drv["KLNM"].ToString().Trim() + " " + drv["KLVNM"].ToString().Trim();
                        printLijnen.Add(lijn);
                        if (isAdres)
                        {
                            lijn = drv["STRAAT"].ToString().Trim() + "," + drv["HUISNR"].ToString().Trim() + "  " +
                                drv["POSTNR"].ToString().Trim() + " - " + drv["STAD"].ToString().Trim();
                            printLijnen.Add(lijn);
                        }
                        if (isContact)
                        {
                            lijn = "Tel:" + drv["TEL1"].ToString().Trim() + "  Email:" + drv["EMAIL"].ToString().Trim();
                            printLijnen.Add(lijn);
                        }
                        if (isAankoop)
                        {
                            string vdatum = "";
                            try
                            {
                                vdatum = DateTime.Parse(drv["DATLAATST"].ToString()).ToShortDateString();
                            }
                            catch (Exception) { };
                            lijn = "Laatste aankoop: " + vdatum.Trim() + "  Aantal Fiches: " + drv["AKORTING"].ToString().Trim();
                            printLijnen.Add(lijn);
                        }
                        printLijnen.Add("EINDE");




                    }
                    catch (Exception ex) { ;}
                }

                printPreviewDialog.Height = 800;
                printPreviewDialog.Width = 1200;
                printPreviewDialog.PrintPreviewControl.Zoom = 0.60;
                printPreviewDialog.ShowDialog();
            
            }
	}
   
    
}